//package com.mes.eventhandler;
//
//import com.mes.data.EmesPBom;
//import com.mes.data.EmesPBomItem;
//import com.mes.manufacture.data.EmesoManuOrder;
//import com.mes.manufacture.data.EmesoManuOrderBomItem;
//import org.hibernate.Query;
//import org.openbravo.base.exception.OBException;
//import org.openbravo.base.model.Entity;
//import org.openbravo.base.model.ModelProvider;
//import org.openbravo.base.model.Property;
//import org.openbravo.client.kernel.event.EntityDeleteEvent;
//import org.openbravo.client.kernel.event.EntityNewEvent;
//import org.openbravo.client.kernel.event.EntityPersistenceEventObserver;
//import org.openbravo.client.kernel.event.EntityUpdateEvent;
//import org.openbravo.dal.core.OBContext;
//import org.openbravo.dal.service.OBDal;
//import org.openbravo.database.ConnectionProvider;
//import org.openbravo.erpCommon.utility.Utility;
//import org.openbravo.service.db.DalConnectionProvider;
//import javax.enterprise.event.Observes;
//import java.math.BigDecimal;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
//public class EmesoManuOrderEventHandler extends EntityPersistenceEventObserver {
//	private static Entity[] entities = { ModelProvider.getInstance().getEntity(EmesoManuOrder.ENTITY_NAME) };
//
//	@Override
//	protected Entity[] getObservedEntities() {
//		return entities;
//	}
//	public void onUpdate(@Observes EntityUpdateEvent event) throws Throwable {
//		if (!isValidEvent(event)) {
//			return;
//		}
//
//		//获取产品ID
//		EmesoManuOrder order = (EmesoManuOrder) event.getTargetInstance();
//
//		if(!order.getStatus().equalsIgnoreCase("CREATE")){
//			return;
//		}
//
//		Date sDate = order.getPlanedDateFrom();
//		Date eDate = order.getPlanedDateTo();
//
//		if(eDate != null && eDate.before(new Date())){
//			String language = OBContext.getOBContext().getLanguage().getLanguage();
//	        ConnectionProvider conn = new DalConnectionProvider(false);
//	        throw new OBException(Utility.messageBD(conn, "计划结束时间早于当前时间，请仔细检查", language));
//		}
//
//		if(sDate != null && sDate.after(eDate)){
//			String language = OBContext.getOBContext().getLanguage().getLanguage();
//			ConnectionProvider conn = new DalConnectionProvider(false);
//			throw new OBException(Utility.messageBD(conn, "计划开始时间晚于计划结束时间，请仔细检查", language));
//		}
//
//		try {
//			String product_id = order.getProduct().getId();
//
//
//			String sqlDel = "delete Emeso_ManuOrder_BOMItem epi where epi.emeso_ManuOrder_id = ?";
//
//			Query query = OBDal.getInstance().getSession().createSQLQuery(sqlDel);
//			query.setString(0, order.getId());
//			query.executeUpdate();
//
//			//定义计划订单的生产类型
//			String type = "";
//			//获取bom项
//			List<EmesPBomItem> list = new ArrayList<EmesPBomItem>();
//			//根据物料获取bom
//			EmesPBom pbom = (EmesPBom) OBDal.getInstance().getSession()
//					.createQuery("from " + EmesPBom.ENTITY_NAME + " ep where ep.product.id = ? and ep.default = true ").setString(0, product_id).uniqueResult();
//
//			final Property pBomProperty = entities[0].getProperty(EmesoManuOrder.PROPERTY_EMESPBOM);
//
//
//			//如果bom为空，则是零部件计划
//			if(pbom == null){
//				//获取该产品下所有物料BOM项
//
//				String sql = "SELECT * FROM emes_pbom_item epi START WITH epi.emes_pbom_item_id = " +
//			     "  (select emes_pbom_item_id from emes_pbom_item t where t.m_product_id = ? "+
//	             "  and ((select is_default from emes_pbom ep where ep.emes_pbom_id = t.emes_pbom_id) = 'Y')) " +
//	             "  CONNECT BY PRIOR epi.emes_pbom_item_id = epi.parent_id ";
//
//				list = OBDal.getInstance().getSession().createSQLQuery(sql).addEntity(EmesPBomItem.ENTITY_NAME).setString(0, product_id).list();
//				event.setCurrentState(pBomProperty, list.get(0).getEmesPbom());
//				type = "NONE";
//			}else{
//				list = pbom.getEmesPBomItemList();
//				event.setCurrentState(pBomProperty,pbom);
//				type = "BOM";
//			}
//
//			BigDecimal orderQty = null;
//
//			if(type.equalsIgnoreCase("NONE")){
//				for(EmesPBomItem o:list){
//					if(o.getProduct().getId().equalsIgnoreCase(order.getProduct().getId())){
//						orderQty = order.getQty().divide(o.getItemQty());
//					}else{
//						continue;
//					}
//				}
//			} else {
//				orderQty = order.getQty();
//			}
//			order.getEmesoManuOrderBomItemList().clear();
//			EmesoManuOrderBomItem epob;
//			for(EmesPBomItem o:list) {
//				if(o.isStopExpan()) {
//					epob = new EmesoManuOrderBomItem();
//					epob.setEmesoManuorder(order);
//					epob.setProduct(o.getProduct());
//					epob.setQty(o.getItemQty().multiply(orderQty));
//					order.getEmesoManuOrderBomItemList().add(epob);
//				}
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}
//
//	//导入计划的时候保存bom项
//	public void onSave(@Observes EntityNewEvent event) {
//		if (!isValidEvent(event)) {
//			return;
//		}
//
//		OBContext.setAdminMode();
//        //获取产品ID
//		EmesoManuOrder order = (EmesoManuOrder) event.getTargetInstance();
//		String product_id = order.getProduct().getId();
//
//		Date sDate = order.getPlanedDateFrom();
//		Date eDate = order.getPlanedDateTo();
//
//		if(eDate != null && eDate.before(new Date())) {
//			String language = OBContext.getOBContext().getLanguage().getLanguage();
//	        ConnectionProvider conn = new DalConnectionProvider(false);
//	        throw new OBException(Utility.messageBD(conn, "计划结束时间早于当前时间，请仔细检查", language));
//		}
//
//		if(sDate != null && eDate != null && sDate.after(eDate)) {
//			String language = OBContext.getOBContext().getLanguage().getLanguage();
//			ConnectionProvider conn = new DalConnectionProvider(false);
//			throw new OBException(Utility.messageBD(conn, "计划开始时间晚于计划结束时间，请仔细检查", language));
//		}
//
////		try {
//		//定义计划订单的生产类型
//		String type = null;
//		//根据物料获取bom
//		EmesPBom pbom = (EmesPBom) OBDal.getInstance().getSession()
//				.createQuery("from " + EmesPBom.ENTITY_NAME + " ep where ep.product.id = ? and ep.default = true ")
//				.setString(0, product_id).uniqueResult();
//
//		final Property pBomProperty = entities[0].getProperty(EmesoManuOrder.PROPERTY_EMESPBOM);
//
//		//获取bom项
//		List<EmesPBomItem> list = null;
//		//如果bom为空，则是零部件计划
//		if(pbom == null) {
//			//获取该产品下所有物料BOM项
//			String hql = "from " + EmesPBom.ENTITY_NAME + " ep where ep.active = true and ep.product.id = ?";
//			List<EmesPBom> boms = (List<EmesPBom>)OBDal.getInstance().getSession().createQuery(hql).setString(0, product_id).list();
//			if (boms == null || boms.isEmpty()) {
//				String language = OBContext.getOBContext().getLanguage().getLanguage();
//				ConnectionProvider conn = new DalConnectionProvider(false);
//				throw new OBException(Utility.messageBD(conn, "当前产品未找到对应的BOM信息", language));
//			}
//			pbom = boms.get(0);
//			type = "NONE";
//		} else {
//			type = "BOM";
//		}
//		list = pbom.getEmesPBomItemList();
//		event.setCurrentState(pBomProperty, pbom);
//
//		BigDecimal orderQty = null;
//
//		if(type.equalsIgnoreCase("NONE")){
//			for(EmesPBomItem o : list){
//				if(o.getProduct().getId().equalsIgnoreCase(order.getProduct().getId())){
//					orderQty = order.getQty().divide(o.getItemQty());
//				} else {
//					continue;
//				}
//			}
//		}else{
//			orderQty = order.getQty();
//		}
//
//		EmesoManuOrderBomItem epob;
//		for(EmesPBomItem o:list){
//			if(o.isStopExpan()){
//				epob = new EmesoManuOrderBomItem();
//				epob.setEmesoManuorder(order);
//				epob.setProduct(o.getProduct());
//				epob.setQty(o.getItemQty().multiply(orderQty));
//				epob.setOrganization(o.getOrganization());
//				order.getEmesoManuOrderBomItemList().add(epob);
//			}
//		}
//	}
//
//	public void onDelete(@Observes EntityDeleteEvent event) {
//		if (!isValidEvent(event)) {
//			return;
//		}
//	}
//
//}
